# pickle

# g) 数据的序列化与反序列化
# i. 什么是序列化 pickle
# ii. "Pickling" 是将 Python 对象及其所拥有的层次结构转化为一个字节流的过程，而 "unpickling" 是相反的操作，
#     会将(来自一个 binary file 或者 bytes - like object 的)字节流转化回一个对象层次结构。
# iii. pickle python专用的序列化格式 输出二进制序列格式
# iv. pickle 可以表示大量的 Python 数据类型(可以合理使用 Python 的对象内省功能自动地表示大多数类型
#     复杂情况可以通过实现 specific object APIs 来解决)
# v. pickle 模块可以将复杂对象转换为字节流，也可以将字节流转换为具有相同内部结构的对象。
#    处理这些字节流最常见的做法是将它们写入文件，但它们也可以通过网络发送或存储在数据库中。


import pickle

# 一般数据对象
my_list = [2, 3, 4]
with open("data.pickle", "wb") as f:
    pickle.dump(my_list, f)


with open("data.pickle", "rb") as f:
    read_data = pickle.load(f)
print(read_data)


# 存储类对象
class A:
    my_int = 100
    my_float = 99.9

    def prt(self,):
        print(f"my int {self.my_int},  my float {self.my_float}")


a = A()
with open("a.pickle", "wb") as f:
    pickle.dump(a, f)


with open("a.pickle", "rb") as f:
    read_a = pickle.load(f)
read_a.prt()
